package br.com.ia.business;

import java.util.ArrayList;
import java.util.List;

import br.com.enovar.trex.core.business.GenericBusiness;
import br.com.ia.model.Valor;
import br.com.ia.model.Variavel;

public class VariavelBusinessImpl extends GenericBusiness implements
		VariavelBusiness {

	private ValorBusiness valorBusiness;

	public ValorBusiness getValorBusiness() {
		return valorBusiness;
	}

	public void setValorBusiness(ValorBusiness valorBusiness) {
		this.valorBusiness = valorBusiness;
	}

	public List<Variavel> buscarVariavel(String descricao) {

		if (descricao == null) {
			descricao = "";
		}

		descricao = "%" + descricao + "%";

		String[] paramNames = { "descricao" };
		Object[] paramValues = { descricao };

		return getHibernateDao()
				.executeQuery(
						"br.com.ia.business.VariavelBusiness.buscarVariavelPorDescricao",
						paramNames, paramValues);

	}

	public void insertVariavel(Variavel variavel, Valor valor) {
		insert(variavel);
		valorBusiness.insert(valor);

		Variavel variavelBD = (Variavel) retrieveById(variavel.getCodigo());
		List<Valor> valores = new ArrayList<Valor>();
		valores.add(valor);
		variavelBD.setValores(valores);

		update(variavelBD);
	}

	public void insertValor(Variavel variavel, Valor valor) {

		Variavel vBD = (Variavel) retrieveById(variavel.getCodigo());

		List<Valor> valores = vBD.getValores();
		valores.add(valor);

		valorBusiness.insert(valor);
		update(vBD);
	}

	public List<Valor> bucarValorPorVariavel(Integer codigo) {

		List<Valor> valoresResult = new ArrayList<Valor>();
		List<Valor> valores = new ArrayList<Valor>();

		Variavel v = (Variavel) retrieveById(codigo);
		if (v != null) {
			valoresResult = v.getValores();
		}

		Valor valor = new Valor();
		valor.setDescricao("selecione...");

		valores.add(valor);
		valores.addAll(valoresResult);

		return valores;
	}

	public List<Variavel> buscarVariavelObjetiva() {

		return getHibernateDao().executeQuery(
				"br.com.ia.business.VariavelBusiness.buscarVariavelObjetiva");
	}
	
	public void updateFlagObjetivo(Integer codigo) {
		Variavel variavel = (Variavel)retrieveById(codigo);
		String flag = null;
		if(!"S".equals(variavel.getFlagObjetiva())){
			flag = "S";
		}
		variavel.setFlagObjetiva(flag);
		update(variavel);
	}

}
